package com.itextpdf.text.pdf;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.itextpdf.text.pdf.PRTokeniser.TokenType;
import java.io.IOException;
public class PRTokeniserTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
private void checkTokenTypes(String data, TokenType... expectedTypes) throws Exception {
PRTokeniser tok = new PRTokeniser(new RandomAccessFileOrArray(data.getBytes()));
for(int i = 0; i < expectedTypes.length; i++){
tok.nextValidToken();
//System.out.println(tok.getTokenType() + " -> " + tok.getStringValue());
Assert.assertEquals("Position " + i, expectedTypes[i], tok.getTokenType());
}
}
private void checkNumberValue(String data, String expectedValue) throws IOException {
PRTokeniser tok = new PRTokeniser(new RandomAccessFileOrArray(data.getBytes()));
tok.nextValidToken();
Assert.assertEquals("Wrong type", TokenType.NUMBER, tok.getTokenType());
Assert.assertEquals("Wrong multiple minus signs number handling", expectedValue, tok.getStringValue());
}
@Test
public void testOneNumber() throws Exception {
checkTokenTypes(
"/Name1 70",
TokenType.NAME,
TokenType.NUMBER,
TokenType.ENDOFFILE
);
}
@Test
public void testTwoNumbers() throws Exception {
checkTokenTypes(
"/Name1 70/Name 2",
TokenType.NAME,
TokenType.NUMBER,
TokenType.NAME,
TokenType.NUMBER,
TokenType.ENDOFFILE
);
}
@Test
public void testMultipleMinusSignsRealNumber() throws Exception {
checkNumberValue("----40.25", "-40.25");
}
@Test
public void testMultipleMinusSignsIntegerNumber() throws Exception {
checkNumberValue("--9", "0");
}
@Test
public void test() throws Exception {
checkTokenTypes(
"<</Size 70/Root 46 0 R/Info 44 0 R/ID[<8C2547D58D4BD2C6F3D32B830BE3259D><8F69587888569A458EB681A4285D5879>]/Prev 116 >>",
TokenType.START_DIC,
TokenType.NAME,
TokenType.NUMBER,
TokenType.NAME,
TokenType.REF,
TokenType.NAME,
TokenType.REF,
TokenType.NAME,
TokenType.START_ARRAY,
TokenType.STRING,
TokenType.STRING,
TokenType.END_ARRAY,
TokenType.NAME,
TokenType.NUMBER,
TokenType.END_DIC,
TokenType.ENDOFFILE
);
}
}